package day22;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

//比较newCachedThreadPool与newSingleThreadExecutor的性能
// 题目描述：
// 编写一个程序，使用newCachedThreadPool和newSingleThreadExecutor分别执行同一批任务，并比较它们的执行时间。要求：
// 创建一个包含1000个任务的列表，每个任务执行一个简单的计算（例如，计算一个较大数的阶乘）。
// 分别使用newCachedThreadPool和newSingleThreadExecutor来执行这批任务，并记录每种线程池的执行时间。
// 输出两种线程池的执行时间，并进行比较。
// 注意：由于阶乘计算可能非常耗时，且对于大数可能导致栈溢出，因此在实际实现中，可以选择一个较小的数或采用其他耗时操作。
public class Homework2 {
    public static void main(String[] args) {
        ExecutorService es1=Executors.newSingleThreadExecutor();
        ExecutorService es2=Executors.newCachedThreadPool();
        long start1=System.currentTimeMillis();
        for (int i=0;i<1000;i++){
            es1.execute(()->{
                long sum=1;
                for (int j=1;j<=10;j++){
                    sum*=j;
                }
            });
        }
        es1.shutdown();
        while (!es1.isTerminated()){};
        long end1=System.currentTimeMillis();

        long start2=System.currentTimeMillis();
        for (int i=0;i<1000;i++){
            es2.execute(()->{
                long sum=1;
                for (int j=1;j<=10;j++){
                    sum*=j;
                }
            });
        }
        es2.shutdown();
        while (!es2.isTerminated()){};
        long end2=System.currentTimeMillis();

        System.out.println("单线程池的执行时间为:"+(end1-start1)+"ms");
        System.out.println("可缓存池的执行时间为:"+(end2-start2)+"ms");
        System.out.println("两个线程的时间差为:"+((end2-start2)-(end1-start1))+"ms");
    }
}
